import request from '@/utils/request'

/**
 * 获取购物车列表
 */
export function getCartList() {
  return request({
    url: '/cart',
    method: 'get'
  })
}

/**
 * 添加商品到购物车
 * @param productId 商品ID
 * @param quantity 数量
 */
export function addToCart(productId, quantity) {
  return request({
    url: '/cart/add',
    method: 'post',
    params: { productId, quantity }
  })
}

/**
 * 更新购物车商品数量
 * @param productId 商品ID
 * @param quantity 数量
 */
export function updateCartItemQuantity(productId, quantity) {
  return request({
    url: '/cart/update',
    method: 'put',
    params: { productId, quantity }
  })
}

/**
 * 删除购物车商品
 * @param productId 商品ID
 */
export function removeFromCart(productId) {
  return request({
    url: `/cart/remove?productId=${productId}`,
    method: 'delete'
  })
}

/**
 * 批量删除购物车商品
 * @param productIds 商品ID列表
 */
export function batchRemoveFromCart(productIds) {
  // Spring MVC对于List类型的@RequestParam，期望格式为：productIds=1&productIds=2
  const productIdsStr = productIds.map(id => `productIds=${id}`).join('&')
  return request({
    url: `/cart/batch-remove?${productIdsStr}`,
    method: 'delete'
  })
}

/**
 * 清空购物车
 */
export function clearCart() {
  return request({
    url: '/cart/clear',
    method: 'delete'
  })
}

/**
 * 获取购物车商品数量
 */
export function getCartCount() {
  return request({
    url: '/cart/count',
    method: 'get'
  })
}

/**
 * 更新商品选中状态
 * @param productId 商品ID
 * @param selected 是否选中
 */
export function updateSelectedStatus(productId, selected) {
  return request({
    url: '/cart/select',
    method: 'put',
    params: { productId, selected }
  })
}

/**
 * 全选/全不选
 * @param selected 是否选中
 */
export function updateAllSelectedStatus(selected) {
  return request({
    url: '/cart/select-all',
    method: 'put',
    params: { selected }
  })
}

/**
 * 计算选中商品总金额
 */
export function calculateTotal() {
  return request({
    url: '/cart/total',
    method: 'get'
  })
}

/**
 * 获取选中的购物车商品
 */
export function getSelectedItems() {
  return request({
    url: '/cart/selected',
    method: 'get'
  })
}